package com.jfinal.weixin.sdk.utils;

import javax.xml.bind.DatatypeConverter;
import java.nio.charset.Charset;

/**
 * JDK6之后 Base64工具
 *
 * 参考：http://www.importnew.com/14961.html
 */
public class Base64Utils {
    private Base64Utils() {}

    /**
     * 编码
     * @param value byte数组
     * @return {String}
     */
    public static String encode(byte[] value) {
        return DatatypeConverter.printBase64Binary(value);
    }

    /**
     * 编码
     * @param value 字符串
     * @return {String}
     */
    public static String encode(String value) {
        byte[] val = value.getBytes(Charsets.UTF_8);
        return Base64Utils.encode(val);
    }

    /**
     * 编码
     * @param value 字符串
     * @param charsetName charSet
     * @return {String}
     */
    public static String encode(String value, String charsetName) {
        byte[] val = value.getBytes(Charset.forName(charsetName));
        return Base64Utils.encode(val);
    }

    /**
     * 解码
     * @param value 字符串
     * @return {byte[]}
     */
    public static byte[] decodeBase64(String value) {
        return DatatypeConverter.parseBase64Binary(value);
    }

    /**
     * 解码
     * @param value 字符串
     * @return {String}
     */
    public static String decode(String value) {
        byte[] decodedValue = Base64Utils.decodeBase64(value);
        return new String(decodedValue, Charsets.UTF_8);
    }

    /**
     * 解码
     * @param value 字符串
     * @param charsetName 字符集
     * @return {String}
     */
    public static String decode(String value, String charsetName) {
        byte[] decodedValue = Base64Utils.decodeBase64(value);
        return new String(decodedValue, Charset.forName(charsetName));
    }

}
